home *** CD-ROM | disk | FTP | other *** search
/ Express Pd: GALORE / Express Pd Galore - The Amiga PD & Shareware CD (1994)(Express Pd)[!][Amiga-CD32-CDTV].iso / productivity / term / phonepanel.c < prev    next >
C/C++ Source or Header  |  1993-07-16  |  53KB  |  2,060 lines

  1. /*
  2. **    PhonePanel.c
  3. **
  4. **    The phonebook and support routines
  5. **
  6. **    Copyright © 1990-1993 by Olaf `Olsen' Barthel & MXM
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12.     /* Gadget IDs. */
  13.  
  14. enum    {    GAD_NAMELIST,        GAD_EDIT,
  15.         GAD_NAME,        GAD_COMMENT,        GAD_PHONENUMBER,    GAD_QUICKMENU,
  16.         GAD_NEWENTRY,        GAD_DIALLIST,        GAD_LOADLIST,        GAD_COPYCONFIG,
  17.         GAD_CLONEENTRY,        GAD_CLEARLIST,        GAD_SORTLIST,        GAD_PASSWORD,
  18.         GAD_REMOVEENTRY,    GAD_USEIT,        GAD_SAVELIST,        GAD_PRINT };
  19.  
  20.     /* Editing IDs. */
  21.  
  22. enum    {    EDIT_SERIAL,        EDIT_MODEM,        EDIT_SCREEN,        EDIT_TERMINAL,
  23.         EDIT_EMULATION,        EDIT_CLIPBOARD,        EDIT_CAPTURE,        EDIT_COMMANDS,
  24.         EDIT_MISC,        EDIT_PATHS,        EDIT_TRANSFER,        EDIT_TRANSLATION,
  25.         EDIT_KEYMACROS,        EDIT_CURSORKEYS,
  26.         EDIT_FASTMACROS,    EDIT_PASSWORD,        EDIT_RATES };
  27.  
  28.     /* What action is to follow clicking into the listview. */
  29.  
  30. enum    {    CLICK_NONE,CLICK_SELECT,CLICK_TOGGLE,CLICK_DIAL };
  31.  
  32. STATIC struct List    EditList;
  33. STATIC struct Node    EditNode[17];
  34.  
  35. STATIC STRPTR        EditName[18];
  36. STATIC struct Hook    ListViewHook;
  37.  
  38.     /* ListViewRender():
  39.      *
  40.      *    This callback routine is responsible for rendering
  41.      *    the single listview entries.
  42.      */
  43.  
  44. STATIC ULONG __saveds __asm
  45. ListViewRender(register __a0 struct Hook *Hook,register __a1 struct LVDrawMsg *Msg,register __a2 struct PhoneNode *Node)
  46. {
  47.         /* We only know how to redraw lines. */
  48.  
  49.     if(Msg -> lvdm_MethodID == LV_DRAW)
  50.     {
  51.         struct RastPort    *RPort    = Msg -> lvdm_RastPort;
  52.         LONG         Count    = Node -> Entry -> Count + 1,
  53.                  Left    = Msg -> lvdm_Bounds . MinX,
  54.                  Top    = Msg -> lvdm_Bounds . MinY,
  55.                  Width    = Msg -> lvdm_Bounds . MaxX - Msg -> lvdm_Bounds . MinX + 1,
  56.                  Height    = Msg -> lvdm_Bounds . MaxY - Msg -> lvdm_Bounds . MinY + 1,
  57.                  FgPen,BgPen,
  58.                  Template,
  59.                  Len,LabelLen;
  60.         UBYTE         String[80],Num[8];
  61.  
  62.             /* Determine the rendering pens. */
  63.  
  64.         switch(Msg -> lvdm_State)
  65.         {
  66.             case LVR_SELECTEDDISABLED:
  67.             case LVR_NORMALDISABLED:
  68.             case LVR_NORMAL:
  69.  
  70.                 FgPen = Msg -> lvdm_DrawInfo -> dri_Pens[TEXTPEN];
  71.                 BgPen = Msg -> lvdm_DrawInfo -> dri_Pens[BACKGROUNDPEN];
  72.                 break;
  73.  
  74.             case LVR_SELECTED:
  75.  
  76.                 FgPen = Msg -> lvdm_DrawInfo -> dri_Pens[FILLTEXTPEN];
  77.                 BgPen = Msg -> lvdm_DrawInfo -> dri_Pens[FILLPEN];
  78.                 break;
  79.         }
  80.  
  81.         SetAPen(RPort,BgPen);
  82.         RectFill(RPort,Left,Top,Left + 1,Top + Height - 1);
  83.  
  84.         Left    += 2;
  85.         Width    -= 2;
  86.  
  87.             /* Determine maximum index text length. */
  88.  
  89.         Template = 3 * ((ULONG)Hook -> h_Data) + TextLength(RPort," - ",3);
  90.  
  91.             /* Get the vanilla name. */
  92.  
  93.         strcpy(String,&Node -> VanillaNode . ln_Name[6]);
  94.  
  95.             /* Set the rendering pens. */
  96.  
  97.         SetDrMd(RPort,JAM2);
  98.         SetBPen(RPort,BgPen);
  99.  
  100.             /* Has this entry been selected? */
  101.  
  102.         if(Count > 0)
  103.         {
  104.             LONG Delta;
  105.  
  106.                 /* Set up the header. */
  107.  
  108.             SPrintf(Num,"%3ld - ",Count);
  109.  
  110.                 /* Determine header length. */
  111.  
  112.             Len = TextLength(RPort,Num,6);
  113.  
  114.                 /* Fill the space to precede the header. */
  115.  
  116.             if((Delta = Template - Len) > 0)
  117.             {
  118.                 SetAPen(RPort,BgPen);
  119.                 RectFill(RPort,Left,Top,Left + Delta - 1,Top + Height - 1);
  120.             }
  121.  
  122.                 /* Render the header, right-justified. */
  123.  
  124.             SetAPen(RPort,FgPen);
  125.  
  126.             Move(RPort,Left + Delta,Top + RPort -> Font -> tf_Baseline);
  127.             Text(RPort,Num,6);
  128.         }
  129.         else
  130.         {
  131.                 /* Fill the blank space to precede the vanilla name. */
  132.  
  133.             SetAPen(RPort,BgPen);
  134.             RectFill(RPort,Left,Top,Left + Template - 1,Top + Height - 1);
  135.             SetAPen(RPort,FgPen);
  136.         }
  137.  
  138.             /* Adjust width and area left edge. */
  139.  
  140.         Left    += Template;
  141.         Width    -= Template;
  142.  
  143.             /* Determine length of vanilla name. */
  144.  
  145.         LabelLen = strlen(String);
  146.  
  147.             /* Try to make it fit. */
  148.  
  149.         while(LabelLen > 0 && (Len = TextLength(RPort,String,LabelLen)) > Width)
  150.             LabelLen--;
  151.  
  152.             /* Print the vanilla name if possible. */
  153.  
  154.         if(LabelLen)
  155.         {
  156.             Move(RPort,Left,Top + RPort -> Font -> tf_Baseline);
  157.             Text(RPort,String,LabelLen);
  158.  
  159.             Left    += Len;
  160.             Width    -= Len;
  161.         }
  162.  
  163.             /* Fill the area to follow the vanilla name. */
  164.  
  165.         if(Width > 0)
  166.         {
  167.             SetAPen(RPort,BgPen);
  168.             RectFill(RPort,Left,Top,Left + Width - 1,Top + Height - 1);
  169.         }
  170.  
  171.             /* If the item happens to be disabled, draw the cross-hatch
  172.              * pattern across it.
  173.              */
  174.  
  175.         if(Msg -> lvdm_State == LVR_SELECTEDDISABLED || Msg -> lvdm_State == LVR_NORMALDISABLED)
  176.         {
  177.             SetDrMd(RPort,JAM1);
  178.  
  179.             SetAPen(RPort,Msg -> lvdm_DrawInfo -> dri_Pens[BLOCKPEN]);
  180.  
  181.             SetAfPt(RPort,(UWORD *)&Ghosting,1);
  182.  
  183.             RectFill(RPort,Msg -> lvdm_Bounds . MinX,Msg -> lvdm_Bounds . MinY,Msg -> lvdm_Bounds . MaxX,Msg -> lvdm_Bounds . MaxY);
  184.  
  185.             SetAfPt(RPort,NULL,0);
  186.         }
  187.  
  188.         return(LVCB_OK);
  189.     }
  190.     else
  191.         return(LVCB_UNKNOWN);
  192. }
  193.  
  194. STATIC struct Gadget *
  195. CreateAllGadgets(struct Gadget **GadgetArray,struct Gadget **GadgetList)
  196. {
  197.     struct Gadget        *Gadget;
  198.     struct NewGadget     NewGadget;
  199.     UWORD             Counter = 0;
  200.     WORD             Lines = EDIT_RATES + 1;
  201.  
  202.     LocalizeString(EditName,MSG_PHONEPANEL_SERIAL_TXT,MSG_PHONEPANEL_RATES_TXT);
  203.  
  204.     memset(&NewGadget,0,sizeof(struct NewGadget));
  205.  
  206.     SZ_SizeSetup(Window -> WScreen,&UserFont,TRUE);
  207.  
  208.     if(Gadget = CreateContext(GadgetList))
  209.     {
  210.         WORD i,Max,Len,Width,ButtonWidth,MaxWidth,LeftEdge,EditWidth,ListWidth;
  211.  
  212.         NewList(&EditList);
  213.  
  214.         for(i = 0 ; i < 17 ; i++)
  215.         {
  216.             EditNode[i] . ln_Name = EditName[i];
  217.  
  218.             AddTail(&EditList,&EditNode[i]);
  219.         }
  220.  
  221.         SZ_ResetMaxWidth();
  222.  
  223.         for(i = MSG_PHONEPANEL_PRINT_GAD ; i <= MSG_PHONEPANEL_SET_PASSWORT_GAD ; i++)
  224.             SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(i),0,NULL);
  225.  
  226.         ButtonWidth = SZ_ResetMaxWidth();
  227.  
  228.         MaxWidth = 4 * ButtonWidth + 3 * INTERWIDTH;
  229.  
  230.         Max = SZ_TextWidth(LocaleString(MSG_PHONEPANEL_PHONE_NUMBER_GAD));
  231.  
  232.         if((Len = SZ_TextWidth(LocaleString(MSG_PHONEPANEL_BBS_NAME_GAD))) > Max)
  233.             Max = Len;
  234.  
  235.         if((Len = SZ_TextWidth(LocaleString(MSG_PHONEPANEL_COMMENT_GAD))) > Max)
  236.             Max = Len;
  237.  
  238.         if((Len = SZ_TextWidth(LocaleString(MSG_PHONEPANEL_QUICK_MENU_GAD))) > Max)
  239.             Max = Len;
  240.  
  241.         SZ_AddLeftOffset(Max + INTERWIDTH);
  242.  
  243.         LeftEdge = SZ_GetLeftEdge();
  244.  
  245.         ListWidth = SZ_Width(LISTVIEW_KIND,NULL,35,NULL);
  246.  
  247.         Width = 0;
  248.  
  249.         for(i = 0 ; i < 17 ; i++)
  250.         {
  251.             if((Len = strlen(EditName[i])) > Width)
  252.                 Width = Len;
  253.         }
  254.  
  255.         EditWidth = SZ_Width(LISTVIEW_KIND,NULL,Width,NULL);
  256.  
  257.         if(MaxWidth > ListWidth + InterWidth + EditWidth)
  258.         {
  259.             LONG Remainder = ListWidth + InterWidth + EditWidth;
  260.  
  261.             Width = (MaxWidth - Remainder) / 2;
  262.  
  263.             ListWidth += Width;
  264.             EditWidth += MaxWidth - (Remainder + Width);
  265.         }
  266.  
  267.         FOREVER
  268.         {
  269.             NewGadget . ng_Flags        = PLACETEXT_ABOVE|NG_HIGHLABEL;
  270.             NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_NAME_LIST_GAD);
  271.             NewGadget . ng_GadgetID        = Counter;
  272.  
  273.             ListViewHook . h_Entry    = (LONG (*)())ListViewRender;
  274.             ListViewHook . h_Data    = (APTR)SZ_GetNumericLen("1");
  275.  
  276.             GadgetArray[Counter++] = Gadget = CreateGadget(LISTVIEW_KIND,Gadget,&NewGadget,
  277.                 SZ_Adjust,        TRUE,
  278.                 SZ_UseWidth,        ListWidth,
  279.                 SZ_Lines,        Lines,
  280.                 SZ_InterHeight,        1,
  281.  
  282.                 GTLV_CallBack,        &ListViewHook,
  283.             TAG_DONE);
  284.  
  285.             if(SZ_GetWindowHeight() + 6 * InterHeight + 3 * (SZ_Height(BUTTON_KIND,0,0) + SZ_Height(STRING_KIND,0,0)) + SZ_Height(CHECKBOX_KIND,0,0) > Window -> Height - (Window -> BorderTop + Window -> BorderBottom) && Lines >= 2)
  286.             {
  287.                 if(*GadgetList)
  288.                 {
  289.                     FreeGadgets(*GadgetList);
  290.  
  291.                     *GadgetList = NULL;
  292.                 }
  293.  
  294.                 SZ_SizeSetup(Window -> WScreen,&UserFont,TRUE);
  295.  
  296.                 Counter = 0;
  297.  
  298.                 Lines--;
  299.  
  300.                 if(!(Gadget = CreateContext(GadgetList)))
  301.                     return(NULL);
  302.  
  303.                 SZ_AddLeftOffset(Max + INTERWIDTH);
  304.             }
  305.             else
  306.                 break;
  307.         }
  308.  
  309.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_SETTINGS_TXT);
  310.         NewGadget . ng_GadgetID        = Counter;
  311.  
  312.         GadgetArray[Counter++] = Gadget = CreateGadget(LISTVIEW_KIND,Gadget,&NewGadget,
  313.             SZ_Adjust,    TRUE,
  314.             SZ_NewColumn,    TRUE,
  315.             SZ_UseWidth,    EditWidth,
  316.             SZ_Lines,    Lines,
  317.             !Kick30 ? TAG_IGNORE : GA_Disabled,    TRUE,
  318.             GTLV_Labels,    &EditList,
  319.             SZ_InterHeight,    1,
  320.         TAG_DONE);
  321.  
  322.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_BBS_NAME_GAD);
  323.         NewGadget . ng_GadgetID        = Counter;
  324.         NewGadget . ng_Flags        = PLACETEXT_LEFT;
  325.  
  326.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  327.             SZ_Adjust,    TRUE,
  328.             SZ_FullWidth,    TRUE,
  329.             SZ_UseLeft,    LeftEdge,
  330.             SZ_AlignBottom,    TRUE,
  331.  
  332.             GTST_MaxChars,    39,
  333.             GA_Disabled,    TRUE,
  334.         TAG_DONE);
  335.  
  336.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_COMMENT_GAD);
  337.         NewGadget . ng_GadgetID        = Counter;
  338.  
  339.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  340.             SZ_Adjust,    TRUE,
  341.             SZ_AutoWidth,    TRUE,
  342.  
  343.             GTST_MaxChars,    99,
  344.             GA_Disabled,    TRUE,
  345.         TAG_DONE);
  346.  
  347.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_PHONE_NUMBER_GAD);
  348.         NewGadget . ng_GadgetID        = Counter;
  349.  
  350.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  351.             SZ_Adjust,    TRUE,
  352.             SZ_AutoWidth,    TRUE,
  353.  
  354.             GTST_MaxChars,    99,
  355.             GA_Disabled,    TRUE,
  356.         TAG_DONE);
  357.  
  358.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_QUICK_MENU_GAD);
  359.         NewGadget . ng_GadgetID        = Counter;
  360.  
  361.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  362.             SZ_Adjust,    TRUE,
  363.             SZ_AutoWidth,    TRUE,
  364.  
  365.             GA_Disabled,    TRUE,
  366.         TAG_DONE);
  367.  
  368.  
  369.         SZ_SetWidth(ButtonWidth);
  370.  
  371.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_NEW_ENTRY_GAD);
  372.         NewGadget . ng_GadgetID        = Counter;
  373.         NewGadget . ng_Flags        = PLACETEXT_IN;
  374.  
  375.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  376.             SZ_Adjust,    TRUE,
  377.             SZ_AutoWidth,    TRUE,
  378.             SZ_AlignBottom,    TRUE,
  379.             SZ_GroupCount,    4,
  380.             SZ_UseLeft,    LeftEdge,
  381.         TAG_DONE);
  382.  
  383.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_DIAL_LIST_GAD);
  384.         NewGadget . ng_GadgetID        = Counter;
  385.  
  386.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  387.             SZ_Adjust,    TRUE,
  388.             SZ_AutoWidth,    TRUE,
  389.             SZ_GroupNext,    TRUE,
  390.  
  391.             GA_Disabled,    TRUE,
  392.         TAG_DONE);
  393.  
  394.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_LOAD_LIST_GAD);
  395.         NewGadget . ng_GadgetID        = Counter;
  396.  
  397.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  398.             SZ_Adjust,    TRUE,
  399.             SZ_AutoWidth,    TRUE,
  400.             SZ_GroupNext,    TRUE,
  401.  
  402.             GA_Disabled,    (Online && ChosenEntry),
  403.         TAG_DONE);
  404.  
  405.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_COPY_CONFIG_GAD);
  406.         NewGadget . ng_GadgetID        = Counter;
  407.  
  408.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  409.             SZ_Adjust,    TRUE,
  410.             SZ_AutoWidth,    TRUE,
  411.             SZ_GroupNext,    TRUE,
  412.  
  413.             GA_Disabled,    TRUE,
  414.         TAG_DONE);
  415.  
  416.  
  417.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_CLONE_ENTRY_GAD);
  418.         NewGadget . ng_GadgetID        = Counter;
  419.  
  420.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  421.             SZ_Adjust,    TRUE,
  422.             SZ_AutoWidth,    TRUE,
  423.             SZ_AlignBottom,    TRUE,
  424.             SZ_GroupCount,    4,
  425.             SZ_UseLeft,    LeftEdge,
  426.  
  427.             GA_Disabled,    TRUE,
  428.         TAG_DONE);
  429.  
  430.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_CLEAR_LIST_GAD);
  431.         NewGadget . ng_GadgetID        = Counter;
  432.  
  433.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  434.             SZ_Adjust,    TRUE,
  435.             SZ_AutoWidth,    TRUE,
  436.             SZ_GroupNext,    TRUE,
  437.  
  438.             GA_Disabled,    TRUE,
  439.         TAG_DONE);
  440.  
  441.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_SORT_LIST_GAD);
  442.         NewGadget . ng_GadgetID        = Counter;
  443.  
  444.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  445.             SZ_Adjust,    TRUE,
  446.             SZ_AutoWidth,    TRUE,
  447.             SZ_GroupNext,    TRUE,
  448.  
  449.             GA_Disabled,    TRUE,
  450.         TAG_DONE);
  451.  
  452.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_SET_PASSWORT_GAD);
  453.         NewGadget . ng_GadgetID        = Counter;
  454.  
  455.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  456.             SZ_Adjust,    TRUE,
  457.             SZ_AutoWidth,    TRUE,
  458.             SZ_GroupNext,    TRUE,
  459.  
  460.             GA_Disabled,    TRUE,
  461.         TAG_DONE);
  462.  
  463.  
  464.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_REMOVE_ENTRY_GAD);
  465.         NewGadget . ng_GadgetID        = Counter;
  466.  
  467.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  468.             SZ_Adjust,    TRUE,
  469.             SZ_AutoWidth,    TRUE,
  470.             SZ_AlignBottom,    TRUE,
  471.             SZ_GroupCount,    4,
  472.             SZ_UseLeft,    LeftEdge,
  473.  
  474.             GA_Disabled,    TRUE,
  475.         TAG_DONE);
  476.  
  477.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_USE_ENTRY_GAD);
  478.         NewGadget . ng_GadgetID        = Counter;
  479.  
  480.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  481.             SZ_Adjust,    TRUE,
  482.             SZ_AutoWidth,    TRUE,
  483.             SZ_GroupNext,    TRUE,
  484.  
  485.             GA_Disabled,    TRUE,
  486.         TAG_DONE);
  487.  
  488.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_SAVE_LIST_GAD);
  489.         NewGadget . ng_GadgetID        = Counter;
  490.  
  491.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  492.             SZ_Adjust,    TRUE,
  493.             SZ_AutoWidth,    TRUE,
  494.             SZ_GroupNext,    TRUE,
  495.  
  496.             GA_Disabled,    TRUE,
  497.         TAG_DONE);
  498.  
  499.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_PRINT_GAD);
  500.         NewGadget . ng_GadgetID        = Counter;
  501.  
  502.         GadgetArray[Counter] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  503.             SZ_Adjust,    TRUE,
  504.             SZ_AutoWidth,    TRUE,
  505.             SZ_GroupNext,    TRUE,
  506.  
  507.             GA_Disabled,    TRUE,
  508.         TAG_DONE);
  509.     }
  510.  
  511.     return(Gadget);
  512. }
  513.  
  514. STATIC BYTE
  515. EditConfig(struct Configuration *Config,UWORD Type,struct Window *PanelWindow)
  516. {
  517.     STATIC LONG TypeMappings[15][2] =
  518.     {
  519.         EDIT_SERIAL,        PREF_SERIAL,
  520.         EDIT_MODEM,        PREF_MODEM,
  521.         EDIT_SCREEN,        PREF_SCREEN,
  522.         EDIT_TERMINAL,        PREF_TERMINAL,
  523.         EDIT_EMULATION,        PREF_EMULATION,
  524.         EDIT_CLIPBOARD,        PREF_CLIP,
  525.         EDIT_CAPTURE,        PREF_CAPTURE,
  526.         EDIT_COMMANDS,        PREF_COMMAND,
  527.         EDIT_MISC,        PREF_MISC,
  528.         EDIT_PATHS,        PREF_PATH,
  529.         EDIT_TRANSFER,        PREF_TRANSFER,
  530.         EDIT_TRANSLATION,    PREF_FILE,
  531.         EDIT_KEYMACROS,        PREF_FILE,
  532.         EDIT_CURSORKEYS,    PREF_FILE,
  533.         EDIT_FASTMACROS,    PREF_FILE
  534.     };
  535.  
  536.     struct FileRequester    *FileRequest;
  537.     UBYTE             DummyBuffer[MAX_FILENAME_LENGTH],
  538.                 *DummyChar;
  539.     BYTE             Changed    = FALSE,
  540.                  Default    = FALSE;
  541.     LONG             PrefType;
  542.     WORD             i;
  543.     APTR             Data;
  544.  
  545.     for(i = 0 ; i < 15 ; i++)
  546.     {
  547.         if(TypeMappings[i][0] == Type)
  548.         {
  549.             PrefType = TypeMappings[i][1];
  550.  
  551.             break;
  552.         }
  553.     }
  554.  
  555.     Data = GetConfigEntry(Config,PrefType);
  556.  
  557.     if(CreateConfigEntry(Config,PrefType))
  558.     {
  559.         if(!Data)
  560.             ResetConfigEntry(Config,PrefType,FALSE);
  561.  
  562.         switch(Type)
  563.         {
  564.             case EDIT_SERIAL:
  565.  
  566.                 Changed = SerialPanel(Config,&Default);
  567.                 break;
  568.  
  569.             case EDIT_MODEM:
  570.  
  571.                 Changed = ModemPanel(Config,&Default);
  572.                 break;
  573.  
  574.             case EDIT_SCREEN:
  575.  
  576.                 Changed = ScreenPanel(Config,&Default);
  577.                 break;
  578.  
  579.             case EDIT_TERMINAL:
  580.  
  581.                 Changed = TerminalPanel(Config,&Default);
  582.                 break;
  583.  
  584.             case EDIT_EMULATION:
  585.  
  586.                 Changed = EmulationPanel(Config,&Default);
  587.                 break;
  588.  
  589.             case EDIT_CLIPBOARD:
  590.  
  591.                 Changed = ClipPanel(Config,&Default);
  592.                 break;
  593.  
  594.             case EDIT_CAPTURE:
  595.  
  596.                 Changed = CapturePanel(Config,&Default);
  597.                 break;
  598.  
  599.             case EDIT_COMMANDS:
  600.  
  601.                 Changed = CommandPanel(Config,&Default);
  602.                 break;
  603.  
  604.             case EDIT_MISC:
  605.  
  606.                 Changed = MiscPanel(Config,&Default);
  607.                 break;
  608.  
  609.             case EDIT_PATHS:
  610.  
  611.                 Changed = PathPanel(Config,&Default);
  612.                 break;
  613.  
  614.             case EDIT_TRANSFER:
  615.  
  616.                 Changed = LibPanel(Config,&Default);
  617.                 break;
  618.  
  619.             case EDIT_TRANSLATION:
  620.  
  621.                 strcpy(DummyBuffer,Config -> FileConfig -> TranslationFileName);
  622.  
  623.                 DummyChar = PathPart(DummyBuffer);
  624.  
  625.                 *DummyChar = 0;
  626.  
  627.                 if(FileRequest = GetFile(LocaleString(MSG_PHONEPANEL_SELECT_TRANSLATION_TXT),DummyBuffer,FilePart(Config -> FileConfig -> TranslationFileName),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SELECT_TXT),TRUE))
  628.                 {
  629.                     strcpy(Config -> FileConfig -> TranslationFileName,DummyBuffer);
  630.  
  631.                     FreeAslRequest(FileRequest);
  632.  
  633.                     Changed = TRUE;
  634.                 }
  635.  
  636.                 break;
  637.  
  638.             case EDIT_KEYMACROS:
  639.  
  640.                 strcpy(DummyBuffer,Config -> FileConfig -> MacroFileName);
  641.  
  642.                 DummyChar = PathPart(DummyBuffer);
  643.  
  644.                 *DummyChar = 0;
  645.  
  646.                 if(FileRequest = GetFile(LocaleString(MSG_PHONEPANEL_SELECT_KEYBOARD_MACROS_TXT),DummyBuffer,FilePart(Config -> FileConfig -> MacroFileName),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SELECT_TXT),TRUE))
  647.                 {
  648.                     strcpy(Config -> FileConfig -> MacroFileName,DummyBuffer);
  649.  
  650.                     FreeAslRequest(FileRequest);
  651.  
  652.                     Changed = TRUE;
  653.                 }
  654.  
  655.                 break;
  656.  
  657.             case EDIT_CURSORKEYS:
  658.  
  659.                 strcpy(DummyBuffer,Config -> FileConfig -> CursorFileName);
  660.  
  661.                 DummyChar = PathPart(DummyBuffer);
  662.  
  663.                 *DummyChar = 0;
  664.  
  665.                 if(FileRequest = GetFile(LocaleString(MSG_PHONEPANEL_SELECT_CURSOR_KEYS_TXT),DummyBuffer,FilePart(Config -> FileConfig -> CursorFileName),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SELECT_TXT),TRUE))
  666.                 {
  667.                     strcpy(Config -> FileConfig -> CursorFileName,DummyBuffer);
  668.  
  669.                     FreeAslRequest(FileRequest);
  670.  
  671.                     Changed = TRUE;
  672.                 }
  673.  
  674.                 break;
  675.  
  676.             case EDIT_FASTMACROS:
  677.  
  678.                 strcpy(DummyBuffer,Config -> FileConfig -> FastMacroFileName);
  679.  
  680.                 DummyChar = PathPart(DummyBuffer);
  681.  
  682.                 *DummyChar = 0;
  683.  
  684.                 if(FileRequest = GetFile(LocaleString(MSG_PHONEPANEL_SELECT_FAST_MACROS_TXT),DummyBuffer,FilePart(Config -> FileConfig -> FastMacroFileName),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SELECT_TXT),TRUE))
  685.                 {
  686.                     strcpy(Config -> FileConfig -> FastMacroFileName,DummyBuffer);
  687.  
  688.                     FreeAslRequest(FileRequest);
  689.  
  690.                     Changed = TRUE;
  691.                 }
  692.  
  693.                 break;
  694.         }
  695.  
  696.         if((!Changed && !Data) || Default)
  697.         {
  698.             DeleteConfigEntry(Config,PrefType);
  699.  
  700.             if(Default)
  701.                 Changed = TRUE;
  702.         }
  703.     }
  704.     else
  705.         DisplayBeep(Window -> WScreen);
  706.  
  707.     return(Changed);
  708. }
  709.  
  710. BYTE
  711. PhonePanel()
  712. {
  713.     STATIC WORD         OffsetX = -1,OffsetY = -1;
  714.  
  715.     struct Window        *PanelWindow;
  716.     struct Gadget        *GadgetList = NULL;
  717.     struct Gadget        *GadgetArray[GAD_PRINT + 1];
  718.  
  719.     ULONG             Sec1,Mic1,Sec2,Mic2;
  720.     LONG             HitItem = -1,Count = -1;
  721.     BYTE             DialTheList = FALSE;
  722.     struct PhoneNode    *TempNode;
  723.     struct List        *PhoneList = NULL;
  724.  
  725.     if(CreateAllGadgets(GadgetArray,&GadgetList))
  726.     {
  727.         if(PanelWindow = OpenWindowTags(NULL,
  728.             WA_Left,    GetScreenLeft(Window) + (GetScreenWidth(Window) - SZ_GetWindowWidth()) / 2,
  729.             WA_Top,        GetScreenTop(Window) + (GetScreenHeight(Window) - SZ_GetWindowHeight())    / 2,
  730.             WA_Width,    SZ_GetWindowWidth(),
  731.             WA_Height,    SZ_GetWindowHeight(),
  732.  
  733.             WA_Activate,    TRUE,
  734.             WA_DragBar,    TRUE,
  735.             WA_DepthGadget,    TRUE,
  736.             WA_RMBTrap,    TRUE,
  737.             WA_DepthGadget,    TRUE,
  738.             WA_CloseGadget,    TRUE,
  739.             WA_CustomScreen,Window -> WScreen,
  740.  
  741.             WA_IDCMP,    IDCMP_GADGETDOWN | IDCMP_ACTIVEWINDOW | IDCMP_CLOSEWINDOW | IDCMP_VANILLAKEY | IDCMP_RAWKEY | STRINGIDCMP | BUTTONIDCMP | LISTVIEWIDCMP,
  742.  
  743.             WA_Title,    LocaleString(MSG_PHONEPANEL_PHONEBOOK_TXT),
  744.         TAG_DONE))
  745.         {
  746.             struct IntuiMessage    *Massage;
  747.             ULONG             IClass,Code,Qualifier;
  748.             struct Gadget        *Gadget;
  749.             BYTE             Terminated = FALSE,
  750.                          ClickAction;
  751.  
  752.             UBYTE             DummyBuffer[MAX_FILENAME_LENGTH],
  753.                         *DummyChar;
  754.  
  755.             LONG             Selected = ~0,i;
  756.  
  757.             struct FileRequester    *FileRequest;
  758.  
  759.             GuideContext(CONTEXT_PHONEBOOK);
  760.  
  761.             PushWindow(PanelWindow);
  762.  
  763.             AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  764.             RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  765.             GT_RefreshWindow(PanelWindow,NULL);
  766.  
  767.             if(Phonebook && NumPhoneEntries)
  768.             {
  769.                 if(PhoneList = CreatePhoneList())
  770.                 {
  771.                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  772.                         GTLV_Labels,PhoneList,
  773.                     TAG_DONE);
  774.  
  775.                     if(PhoneList -> lh_Head -> ln_Succ)
  776.                     {
  777.                         GT_SetGadgetAttrs(GadgetArray[GAD_SAVELIST],PanelWindow,NULL,
  778.                             GA_Disabled,    FALSE,
  779.                         TAG_DONE);
  780.  
  781.                         GT_SetGadgetAttrs(GadgetArray[GAD_PRINT],PanelWindow,NULL,
  782.                             GA_Disabled,    FALSE,
  783.                         TAG_DONE);
  784.  
  785.                         GT_SetGadgetAttrs(GadgetArray[GAD_COPYCONFIG],PanelWindow,NULL,
  786.                             GA_Disabled,    FALSE,
  787.                         TAG_DONE);
  788.  
  789.                         GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
  790.                             GA_Disabled,    FALSE,
  791.                         TAG_DONE);
  792.  
  793.                         if(PhoneList -> lh_Head -> ln_Succ -> ln_Succ)
  794.                         {
  795.                             GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
  796.                                 GA_Disabled,    FALSE,
  797.                             TAG_DONE);
  798.                         }
  799.                     }
  800.                 }
  801.             }
  802.  
  803.             ActiveGadget = NULL;
  804.  
  805.             FreeDialList(TRUE);
  806.  
  807.             for(i = 0 ; i < NumPhoneEntries ; i++)
  808.             {
  809.                 if(Phonebook[i] -> Count > Count)
  810.                     Count = Phonebook[i] -> Count;
  811.             }
  812.  
  813.             Count++;
  814.  
  815.             if(Count)
  816.             {
  817.                 if(!Online)
  818.                 {
  819.                     GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
  820.                         GA_Disabled,    FALSE,
  821.                     TAG_DONE);
  822.                 }
  823.  
  824.                 GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
  825.                     GA_Disabled,    FALSE,
  826.                 TAG_DONE);
  827.             }
  828.  
  829.             ClrSignal(SIG_BREAK);
  830.  
  831.             while(!Terminated)
  832.             {
  833.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  834.                 {
  835.                     FreeDialList(TRUE);
  836.  
  837.                     break;
  838.                 }
  839.  
  840.                 while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  841.                 {
  842.                     IClass        = Massage -> Class;
  843.                     Code        = Massage -> Code;
  844.                     Qualifier    = Massage -> Qualifier;
  845.                     Gadget        = (struct Gadget *)Massage -> IAddress;
  846.  
  847.                     GT_ReplyIMsg(Massage);
  848.  
  849.                     if(IClass == IDCMP_VANILLAKEY)
  850.                     {
  851.                         if(Code == ' ')
  852.                         {
  853.                             if(Selected != -1)
  854.                             {
  855.                                 HitItem = -1;
  856.  
  857.                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  858.                                     GTLV_Labels,    ~0,
  859.                                 TAG_DONE);
  860.  
  861.                                 if(Phonebook[Selected] -> Count == -1)
  862.                                 {
  863.                                     if(!Count)
  864.                                     {
  865.                                         GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
  866.                                             GA_Disabled,    FALSE,
  867.                                         TAG_DONE);
  868.                                     }
  869.  
  870.                                     if(!Online && Phonebook[Selected] -> Header -> Number[0] && Phonebook[Selected] -> Header -> Name[0])
  871.                                     {
  872.                                         GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
  873.                                             GA_Disabled,    FALSE,
  874.                                         TAG_DONE);
  875.                                     }
  876.  
  877.                                     Phonebook[Selected] -> Count = Count++;
  878.  
  879.                                     SPrintf(Phonebook[Selected] -> Node -> LocalName,"%3ld - %s",Count,Phonebook[Selected] -> Header -> Name);
  880.                                 }
  881.                                 else
  882.                                 {
  883.                                     RemoveDialEntry(Selected);
  884.  
  885.                                     if(!(--Count))
  886.                                     {
  887.                                         GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
  888.                                             GA_Disabled,    TRUE,
  889.                                         TAG_DONE);
  890.                                     }
  891.                                 }
  892.  
  893.                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  894.                                     GTLV_Labels,    PhoneList,
  895.                                 TAG_DONE);
  896.                             }
  897.                         }
  898.                         else
  899.                         {
  900.                             KeySelect(GadgetArray,GAD_PRINT,Code,PanelWindow,&Gadget,&IClass,&Code);
  901.  
  902.                             if(IClass == IDCMP_GADGETUP)
  903.                                 Qualifier = NULL;
  904.                         }
  905.                     }
  906.  
  907.                     if(IClass == IDCMP_RAWKEY)
  908.                     {
  909.                         KeySelect(GadgetArray,GAD_PRINT,Code,PanelWindow,&Gadget,&IClass,&Code);
  910.  
  911.                         if(IClass == IDCMP_GADGETUP)
  912.                             Qualifier = NULL;
  913.                     }
  914.  
  915.                     if(IClass == IDCMP_GADGETDOWN)
  916.                     {
  917.                         if((Gadget -> GadgetType & GTYP_GTYPEMASK) == GTYP_STRGADGET)
  918.                             ActiveGadget = Gadget;
  919.                     }
  920.  
  921.                     if(IClass == IDCMP_ACTIVEWINDOW && ActiveGadget)
  922.                         ActivateGadget(ActiveGadget,PanelWindow,NULL);
  923.  
  924.                     if(IClass == IDCMP_CLOSEWINDOW)
  925.                     {
  926.                         FreeDialList(TRUE);
  927.  
  928.                         Terminated = TRUE;
  929.                     }
  930.  
  931.                     if(IClass == IDCMP_GADGETUP)
  932.                     {
  933.                         switch(Gadget -> GadgetID)
  934.                         {
  935.                             case GAD_NAMELIST:
  936.  
  937.                                 if(HitItem != Code)
  938.                                 {
  939.                                     HitItem = Code;
  940.  
  941.                                     CurrentTime(&Sec1,&Mic1);
  942.  
  943.                                     if(Phonebook[Code] -> Header -> Number[0] && Phonebook[Code] -> Header -> Name[0])
  944.                                     {
  945.                                         if(Qualifier & (IEQUALIFIER_LSHIFT|IEQUALIFIER_RSHIFT))
  946.                                             ClickAction = CLICK_TOGGLE;
  947.                                         else
  948.                                             ClickAction = CLICK_SELECT;
  949.                                     }
  950.                                     else
  951.                                         ClickAction = CLICK_SELECT;
  952.                                 }
  953.                                 else
  954.                                 {
  955.                                     if(Phonebook[Code] -> Header -> Number[0] && Phonebook[Code] -> Header -> Name[0])
  956.                                     {
  957.                                         if(Qualifier & (IEQUALIFIER_LSHIFT|IEQUALIFIER_RSHIFT))
  958.                                         {
  959.                                             CurrentTime(&Sec1,&Mic1);
  960.  
  961.                                             ClickAction = CLICK_TOGGLE;
  962.                                         }
  963.                                         else
  964.                                         {
  965.                                             CurrentTime(&Sec2,&Mic2);
  966.  
  967.                                             if(DoubleClick(Sec1,Mic1,Sec2,Mic2))
  968.                                                 ClickAction = CLICK_DIAL;
  969.                                             else
  970.                                                 ClickAction = CLICK_NONE;
  971.  
  972.                                             Sec1 = Sec2;
  973.                                             Mic1 = Mic2;
  974.                                         }
  975.                                     }
  976.                                     else
  977.                                     {
  978.                                         CurrentTime(&Sec1,&Mic1);
  979.  
  980.                                         ClickAction = CLICK_NONE;
  981.                                     }
  982.                                 }
  983.  
  984.                                 if(ClickAction == CLICK_SELECT || ClickAction == CLICK_TOGGLE)
  985.                                 {
  986.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
  987.                                         GTST_String,    Phonebook[Code] -> Header -> Name,
  988.                                         GA_Disabled,    FALSE,
  989.                                     TAG_DONE);
  990.  
  991.                                     GT_SetGadgetAttrs(GadgetArray[GAD_COMMENT],PanelWindow,NULL,
  992.                                         GTST_String,    Phonebook[Code] -> Header -> Comment,
  993.                                         GA_Disabled,    FALSE,
  994.                                     TAG_DONE);
  995.  
  996.                                     GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
  997.                                         GTST_String,    Phonebook[Code] -> Header -> Number,
  998.                                         GA_Disabled,    FALSE,
  999.                                     TAG_DONE);
  1000.  
  1001.                                     GT_SetGadgetAttrs(GadgetArray[GAD_QUICKMENU],PanelWindow,NULL,
  1002.                                         GTCB_Checked,    Phonebook[Code] -> Header -> QuickMenu,
  1003.                                         GA_Disabled,    FALSE,
  1004.                                     TAG_DONE);
  1005.  
  1006.                                     GT_SetGadgetAttrs(GadgetArray[GAD_USEIT],PanelWindow,NULL,
  1007.                                         GA_Disabled,    FALSE,
  1008.                                     TAG_DONE);
  1009.  
  1010.                                     GT_SetGadgetAttrs(GadgetArray[GAD_REMOVEENTRY],PanelWindow,NULL,
  1011.                                         GA_Disabled,    (Phonebook[Code] == ChosenEntry && Online),
  1012.                                     TAG_DONE);
  1013.  
  1014.                                     GT_SetGadgetAttrs(GadgetArray[GAD_CLONEENTRY],PanelWindow,NULL,
  1015.                                         GA_Disabled,    FALSE,
  1016.                                     TAG_DONE);
  1017.  
  1018.                                     GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
  1019.                                         GA_Disabled,    Online || !(Count || Phonebook[Code] -> Header -> Number[0] && Phonebook[Code] -> Header -> Name[0]),
  1020.                                     TAG_DONE);
  1021.  
  1022.                                     if(Kick30)
  1023.                                     {
  1024.                                         GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
  1025.                                             GA_Disabled,    FALSE,
  1026.                                         TAG_DONE);
  1027.                                     }
  1028.  
  1029.                                     Selected = Code;
  1030.                                 }
  1031.  
  1032.                                 if(ClickAction == CLICK_DIAL)
  1033.                                 {
  1034.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1035.                                         GTLV_Labels,    ~0,
  1036.                                     TAG_DONE);
  1037.  
  1038.                                     Count = 0;
  1039.  
  1040.                                     for(i = 0 ; i < NumPhoneEntries ; i++)
  1041.                                     {
  1042.                                         SPrintf(Phonebook[i] -> Node -> LocalName,"      %s",Phonebook[i] -> Header -> Name);
  1043.  
  1044.                                         Phonebook[i] -> Count = -1;
  1045.                                     }
  1046.  
  1047.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1048.                                         GTLV_Labels,    PhoneList,
  1049.                                     TAG_DONE);
  1050.  
  1051.                                     DialTheList    = TRUE;
  1052.                                     Terminated    = TRUE;
  1053.                                 }
  1054.  
  1055.                                 if(ClickAction == CLICK_TOGGLE || ClickAction == CLICK_DIAL)
  1056.                                 {
  1057.                                     HitItem = -1;
  1058.  
  1059.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1060.                                         GTLV_Labels,    ~0,
  1061.                                     TAG_DONE);
  1062.  
  1063.                                     if(Phonebook[Selected] -> Count == -1)
  1064.                                     {
  1065.                                         if(!Count)
  1066.                                         {
  1067.                                             GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
  1068.                                                 GA_Disabled,    FALSE,
  1069.                                             TAG_DONE);
  1070.                                         }
  1071.  
  1072.                                         Phonebook[Selected] -> Count = Count++;
  1073.  
  1074.                                         SPrintf(Phonebook[Selected] -> Node -> LocalName,"%3ld - %s",Count,Phonebook[Selected] -> Header -> Name);
  1075.                                     }
  1076.                                     else
  1077.                                     {
  1078.                                         RemoveDialEntry(Selected);
  1079.  
  1080.                                         if(!(--Count))
  1081.                                         {
  1082.                                             GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
  1083.                                                 GA_Disabled,    TRUE,
  1084.                                             TAG_DONE);
  1085.                                         }
  1086.                                     }
  1087.  
  1088.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1089.                                         GTLV_Labels,    PhoneList,
  1090.                                     TAG_DONE);
  1091.                                 }
  1092.  
  1093.                                 break;
  1094.  
  1095.                             case GAD_CLEARLIST:
  1096.  
  1097.                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1098.                                     GTLV_Labels,    ~0,
  1099.                                 TAG_DONE);
  1100.  
  1101.                                 Count = 0;
  1102.  
  1103.                                 for(i = 0 ; i < NumPhoneEntries ; i++)
  1104.                                 {
  1105.                                     SPrintf(Phonebook[i] -> Node -> LocalName,"      %s",Phonebook[i] -> Header -> Name);
  1106.  
  1107.                                     Phonebook[i] -> Count = -1;
  1108.                                 }
  1109.  
  1110.                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1111.                                     GTLV_Labels,    PhoneList,
  1112.                                 TAG_DONE);
  1113.  
  1114.                                 if(Selected == ~0)
  1115.                                 {
  1116.                                     GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
  1117.                                         GA_Disabled,    TRUE,
  1118.                                     TAG_DONE);
  1119.                                 }
  1120.  
  1121.                                 GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
  1122.                                     GA_Disabled,    TRUE,
  1123.                                 TAG_DONE);
  1124.  
  1125.                                 break;
  1126.  
  1127.                             case GAD_PRINT:
  1128.  
  1129.                                 BlockWindow(PanelWindow);
  1130.  
  1131.                                 PrintPanel(PanelWindow,PhoneList,Count);
  1132.  
  1133.                                 ReleaseWindow(PanelWindow);
  1134.  
  1135.                                 break;
  1136.  
  1137.                             case GAD_USEIT:
  1138.  
  1139.                                 if(Selected != ~0)
  1140.                                 {
  1141.                                     SaveConfig(Config,PrivateConfig);
  1142.  
  1143.                                     SaveConfig(Phonebook[Selected] -> Config,Config);
  1144.  
  1145.                                     strcpy(Password,Phonebook[Selected] -> Header -> Password);
  1146.                                     strcpy(UserName,Phonebook[Selected] -> Header -> UserName);
  1147.  
  1148.                                     ConfigSetup();
  1149.  
  1150.                                     Terminated = TRUE;
  1151.  
  1152.                                     ConfigChanged = FALSE;
  1153.                                 }
  1154.  
  1155.                                 break;
  1156.  
  1157.                             case GAD_NEWENTRY:
  1158.  
  1159.                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1160.                                     GTLV_Labels,    ~0,
  1161.                                 TAG_DONE);
  1162.  
  1163.                                 if(PhoneList)
  1164.                                 {
  1165.                                     DeletePhoneList(PhoneList);
  1166.  
  1167.                                     PhoneList = NULL;
  1168.                                 }
  1169.  
  1170.                                 if(NewPhoneEntry())
  1171.                                 {
  1172.                                     if(PhoneList = CreatePhoneList())
  1173.                                     {
  1174.                                         Selected = NumPhoneEntries - 1;
  1175.  
  1176.                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1177.                                             GTLV_Labels,        PhoneList,
  1178.                                             GTLV_Selected,        Selected,
  1179.                                             GTLV_Top,        Selected,
  1180.                                             GTLV_MakeVisible,    Selected,
  1181.                                         TAG_DONE);
  1182.  
  1183.                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
  1184.                                             GTST_String,        Phonebook[Selected] -> Header -> Name,
  1185.                                             GA_Disabled,        FALSE,
  1186.                                         TAG_DONE);
  1187.  
  1188.                                         GT_SetGadgetAttrs(GadgetArray[GAD_COMMENT],PanelWindow,NULL,
  1189.                                             GTST_String,    Phonebook[Selected] -> Header -> Comment,
  1190.                                             GA_Disabled,    FALSE,
  1191.                                         TAG_DONE);
  1192.  
  1193.                                         GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
  1194.                                             GTST_String,    Phonebook[Selected] -> Header -> Number,
  1195.                                             GA_Disabled,    FALSE,
  1196.                                         TAG_DONE);
  1197.  
  1198.                                         GT_SetGadgetAttrs(GadgetArray[GAD_QUICKMENU],PanelWindow,NULL,
  1199.                                             GTCB_Checked,    Phonebook[Selected] -> Header -> QuickMenu,
  1200.                                             GA_Disabled,    FALSE,
  1201.                                         TAG_DONE);
  1202.  
  1203.                                         GT_SetGadgetAttrs(GadgetArray[GAD_USEIT],PanelWindow,NULL,
  1204.                                             GA_Disabled,    FALSE,
  1205.                                         TAG_DONE);
  1206.  
  1207.                                         GT_SetGadgetAttrs(GadgetArray[GAD_REMOVEENTRY],PanelWindow,NULL,
  1208.                                             GA_Disabled,    FALSE,
  1209.                                         TAG_DONE);
  1210.  
  1211.                                         GT_SetGadgetAttrs(GadgetArray[GAD_CLONEENTRY],PanelWindow,NULL,
  1212.                                             GA_Disabled,    FALSE,
  1213.                                         TAG_DONE);
  1214.  
  1215.                                         if(Kick30)
  1216.                                         {
  1217.                                             GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
  1218.                                                 GA_Disabled,    FALSE,
  1219.                                             TAG_DONE);
  1220.                                         }
  1221.  
  1222.                                         if(NumPhoneEntries == 1)
  1223.                                         {
  1224.                                             GT_SetGadgetAttrs(GadgetArray[GAD_SAVELIST],PanelWindow,NULL,
  1225.                                                 GA_Disabled,    FALSE,
  1226.                                             TAG_DONE);
  1227.  
  1228.                                             GT_SetGadgetAttrs(GadgetArray[GAD_PRINT],PanelWindow,NULL,
  1229.                                                 GA_Disabled,    FALSE,
  1230.                                             TAG_DONE);
  1231.  
  1232.                                             GT_SetGadgetAttrs(GadgetArray[GAD_COPYCONFIG],PanelWindow,NULL,
  1233.                                                 GA_Disabled,    FALSE,
  1234.                                             TAG_DONE);
  1235.  
  1236.                                             GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
  1237.                                                 GA_Disabled,    FALSE,
  1238.                                             TAG_DONE);
  1239.                                         }
  1240.  
  1241.                                         if(NumPhoneEntries > 1)
  1242.                                         {
  1243.                                             GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
  1244.                                                 GA_Disabled,    FALSE,
  1245.                                             TAG_DONE);
  1246.                                         }
  1247.  
  1248.                                         ActivateGadget(GadgetArray[GAD_NAME],PanelWindow,NULL);
  1249.  
  1250.                                         ActiveGadget = GadgetArray[GAD_NAME];
  1251.  
  1252.                                         RebuildMenu = PhonebookChanged = TRUE;
  1253.                                     }
  1254.                                     else
  1255.                                         goto ClearList;
  1256.                                 }
  1257.                                 else
  1258.                                     goto ClearList;
  1259.  
  1260.                                 break;
  1261.  
  1262.                             case GAD_CLONEENTRY:
  1263.  
  1264.                                 if(Selected != ~0)
  1265.                                 {
  1266.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1267.                                         GTLV_Labels,    ~0,
  1268.                                     TAG_DONE);
  1269.  
  1270.                                     if(PhoneList)
  1271.                                     {
  1272.                                         DeletePhoneList(PhoneList);
  1273.  
  1274.                                         PhoneList = NULL;
  1275.                                     }
  1276.  
  1277.                                     if(NewPhoneEntry())
  1278.                                     {
  1279.                                         if(PhoneList = CreatePhoneList())
  1280.                                         {
  1281.                                             LONG Tmp = Selected,i;
  1282.  
  1283.                                             Selected = NumPhoneEntries - 1;
  1284.  
  1285.                                             CopyMem(Phonebook[Tmp] -> Header,Phonebook[Selected] -> Header,sizeof(struct PhoneHeader));
  1286.  
  1287.                                             Phonebook[Selected] -> Header -> QuickMenu = FALSE;
  1288.  
  1289.                                             SPrintf(Phonebook[Selected] -> Node -> LocalName,"      %s",Phonebook[Selected] -> Header -> Name);
  1290.  
  1291.                                             GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1292.                                                 GTLV_Labels,        PhoneList,
  1293.                                                 GTLV_Selected,        Selected,
  1294.                                                 GTLV_Top,        Selected,
  1295.                                                 GTLV_MakeVisible,    Selected,
  1296.                                             TAG_DONE);
  1297.  
  1298.                                             GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
  1299.                                                 GTST_String,    Phonebook[Selected] -> Header -> Name,
  1300.                                             TAG_DONE);
  1301.  
  1302.                                             GT_SetGadgetAttrs(GadgetArray[GAD_COMMENT],PanelWindow,NULL,
  1303.                                                 GTST_String,    Phonebook[Selected] -> Header -> Comment,
  1304.                                             TAG_DONE);
  1305.  
  1306.                                             GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
  1307.                                                 GTST_String,    Phonebook[Selected] -> Header -> Number,
  1308.                                             TAG_DONE);
  1309.  
  1310.                                             GT_SetGadgetAttrs(GadgetArray[GAD_QUICKMENU],PanelWindow,NULL,
  1311.                                                 GTCB_Checked,    Phonebook[Selected] -> Header -> QuickMenu,
  1312.                                             TAG_DONE);
  1313.  
  1314.                                             if(NumPhoneEntries > 1)
  1315.                                             {
  1316.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
  1317.                                                     GA_Disabled,    FALSE,
  1318.                                                 TAG_DONE);
  1319.                                             }
  1320.  
  1321.                                                 /* Allocate space for the config data. */
  1322.  
  1323.                                             for(i = PREF_SERIAL ; i <= PREF_EMULATION ; i++)
  1324.                                             {
  1325.                                                 if(GetConfigEntry(Phonebook[Tmp] -> Config,i))
  1326.                                                     CreateConfigEntry(Phonebook[Selected] -> Config,i);
  1327.                                             }
  1328.  
  1329.                                                 /* Copy the data. */
  1330.  
  1331.                                             SaveConfig(Phonebook[Tmp] -> Config,Phonebook[Selected] -> Config);
  1332.  
  1333.                                             RebuildMenu = PhonebookChanged = TRUE;
  1334.                                         }
  1335.                                         else
  1336.                                             goto ClearList;
  1337.                                     }
  1338.                                     else
  1339.                                         goto ClearList;
  1340.                                 }
  1341.  
  1342.                                 break;
  1343.  
  1344.                             case GAD_REMOVEENTRY:
  1345.  
  1346.                                 if(Selected != ~0)
  1347.                                 {
  1348.                                     if(Phonebook[Selected] == ChosenEntry)
  1349.                                         MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_PHONE_ENTRY_IN_USE_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT));
  1350.                                     else
  1351.                                     {
  1352.                                         RebuildMenu = PhonebookChanged = TRUE;
  1353.  
  1354.                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1355.                                             GTLV_Labels,~0,
  1356.                                         TAG_DONE);
  1357.  
  1358.                                         if(PhoneList)
  1359.                                         {
  1360.                                             DeletePhoneList(PhoneList);
  1361.  
  1362.                                             PhoneList = NULL;
  1363.                                         }
  1364.  
  1365.                                         if(Phonebook[Selected] -> Count != -1)
  1366.                                         {
  1367.                                             RemoveDialEntry(Selected);
  1368.  
  1369.                                             if(!(--Count))
  1370.                                             {
  1371.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
  1372.                                                     GA_Disabled,    TRUE,
  1373.                                                 TAG_DONE);
  1374.                                             }
  1375.                                         }
  1376.  
  1377.                                         RemPhoneEntry(Selected);
  1378.  
  1379.                                         if(NumPhoneEntries > 0)
  1380.                                         {
  1381.                                             if(PhoneList = CreatePhoneList())
  1382.                                             {
  1383.                                                 if(Selected == NumPhoneEntries)
  1384.                                                     Selected--;
  1385.  
  1386.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1387.                                                     GTLV_Labels,    PhoneList,
  1388.                                                     GTLV_Selected,    Selected,
  1389.                                                 TAG_DONE);
  1390.  
  1391.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
  1392.                                                     GTST_String,    Phonebook[Selected] -> Header -> Name,
  1393.                                                 TAG_DONE);
  1394.  
  1395.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_COMMENT],PanelWindow,NULL,
  1396.                                                     GTST_String,    Phonebook[Selected] -> Header -> Comment,
  1397.                                                 TAG_DONE);
  1398.  
  1399.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
  1400.                                                     GTST_String,    Phonebook[Selected] -> Header -> Number,
  1401.                                                 TAG_DONE);
  1402.  
  1403.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_QUICKMENU],PanelWindow,NULL,
  1404.                                                     GTCB_Checked,    Phonebook[Selected] -> Header -> QuickMenu,
  1405.                                                 TAG_DONE);
  1406.                                             }
  1407.                                             else
  1408.                                                 goto ClearList;
  1409.  
  1410.                                             if(NumPhoneEntries == 1)
  1411.                                             {
  1412.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
  1413.                                                     GA_Disabled,    TRUE,
  1414.                                                 TAG_DONE);
  1415.                                             }
  1416.                                         }
  1417.                                         else
  1418.                                         {
  1419. ClearList:                                        GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1420.                                                 GTLV_Labels,    &EmptyList,
  1421.                                             TAG_DONE);
  1422.  
  1423.                                             GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
  1424.                                                 GTST_String,    "",
  1425.                                                 GA_Disabled,    TRUE,
  1426.                                             TAG_DONE);
  1427.  
  1428.                                             GT_SetGadgetAttrs(GadgetArray[GAD_COMMENT],PanelWindow,NULL,
  1429.                                                 GTST_String,    "",
  1430.                                                 GA_Disabled,    TRUE,
  1431.                                             TAG_DONE);
  1432.  
  1433.                                             GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
  1434.                                                 GTST_String,    "",
  1435.                                                 GA_Disabled,    TRUE,
  1436.                                             TAG_DONE);
  1437.  
  1438.                                             GT_SetGadgetAttrs(GadgetArray[GAD_QUICKMENU],PanelWindow,NULL,
  1439.                                                 GA_Disabled,    TRUE,
  1440.                                             TAG_DONE);
  1441.  
  1442.                                             GT_SetGadgetAttrs(GadgetArray[GAD_USEIT],PanelWindow,NULL,
  1443.                                                 GA_Disabled,    TRUE,
  1444.                                             TAG_DONE);
  1445.  
  1446.                                             GT_SetGadgetAttrs(GadgetArray[GAD_REMOVEENTRY],PanelWindow,NULL,
  1447.                                                 GA_Disabled,    TRUE,
  1448.                                             TAG_DONE);
  1449.  
  1450.                                             GT_SetGadgetAttrs(GadgetArray[GAD_CLONEENTRY],PanelWindow,NULL,
  1451.                                                 GA_Disabled,    TRUE,
  1452.                                             TAG_DONE);
  1453.  
  1454.                                             GT_SetGadgetAttrs(GadgetArray[GAD_SAVELIST],PanelWindow,NULL,
  1455.                                                 GA_Disabled,    TRUE,
  1456.                                             TAG_DONE);
  1457.  
  1458.                                             GT_SetGadgetAttrs(GadgetArray[GAD_PRINT],PanelWindow,NULL,
  1459.                                                 GA_Disabled,    TRUE,
  1460.                                             TAG_DONE);
  1461.  
  1462.                                             GT_SetGadgetAttrs(GadgetArray[GAD_COPYCONFIG],PanelWindow,NULL,
  1463.                                                 GA_Disabled,    TRUE,
  1464.                                             TAG_DONE);
  1465.  
  1466.                                             GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
  1467.                                                 GA_Disabled,    TRUE,
  1468.                                             TAG_DONE);
  1469.  
  1470.                                             GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
  1471.                                                 GA_Disabled,    TRUE,
  1472.                                             TAG_DONE);
  1473.  
  1474.                                             GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
  1475.                                                 GA_Disabled,    TRUE,
  1476.                                             TAG_DONE);
  1477.  
  1478.                                             if(Kick30)
  1479.                                             {
  1480.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
  1481.                                                     GA_Disabled,    TRUE,
  1482.                                                 TAG_DONE);
  1483.                                             }
  1484.  
  1485.                                             ActiveGadget = NULL;
  1486.  
  1487.                                             Selected    = ~0;
  1488.                                             HitItem        = -1;
  1489.                                         }
  1490.                                     }
  1491.                                 }
  1492.  
  1493.                                 break;
  1494.  
  1495.                             case GAD_NAME:
  1496.  
  1497.                                 if(Selected != ~0)
  1498.                                 {
  1499.                                     strcpy(Phonebook[Selected] -> Header -> Name,SZ_GetString(GadgetArray[GAD_NAME]));
  1500.  
  1501.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1502.                                         GTLV_Labels,~0,
  1503.                                     TAG_DONE);
  1504.  
  1505.                                     if(PhoneList)
  1506.                                         DeletePhoneList(PhoneList);
  1507.  
  1508.                                     if(PhoneList = CreatePhoneList())
  1509.                                     {
  1510.                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1511.                                             GTLV_Labels,        PhoneList,
  1512.                                             GTLV_Selected,        Selected,
  1513.                                             GTLV_Top,        Selected,
  1514.                                             GTLV_MakeVisible,    Selected,
  1515.                                         TAG_DONE);
  1516.                                     }
  1517.  
  1518.                                     if(!Phonebook[Selected] -> Header -> Name[0])
  1519.                                     {
  1520.                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1521.                                             GTLV_Labels,    ~0,
  1522.                                         TAG_DONE);
  1523.  
  1524.                                         if(Phonebook[Selected] -> Count != -1)
  1525.                                         {
  1526.                                             RemoveDialEntry(Selected);
  1527.  
  1528.                                             if(!(--Count))
  1529.                                             {
  1530.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
  1531.                                                     GA_Disabled,    TRUE,
  1532.                                                 TAG_DONE);
  1533.                                             }
  1534.                                         }
  1535.  
  1536.                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1537.                                             GTLV_Labels,        PhoneList,
  1538.                                             GTLV_Selected,        Selected,
  1539.                                             GTLV_Top,        Selected,
  1540.                                             GTLV_MakeVisible,    Selected,
  1541.                                         TAG_DONE);
  1542.                                     }
  1543.                                     else
  1544.                                     {
  1545.                                         GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
  1546.                                             GA_Disabled,    Online || !Phonebook[Selected] -> Header -> Number[0] || !Phonebook[Selected] -> Header -> Name[0],
  1547.                                         TAG_DONE);
  1548.                                     }
  1549.  
  1550.                                     RebuildMenu = PhonebookChanged = TRUE;
  1551.                                 }
  1552.  
  1553.                                 break;
  1554.  
  1555.                             case GAD_COMMENT:
  1556.  
  1557.                                 if(Selected != ~0)
  1558.                                 {
  1559.                                     strcpy(Phonebook[Selected] -> Header -> Comment,SZ_GetString(GadgetArray[GAD_COMMENT]));
  1560.  
  1561.                                     PhonebookChanged = TRUE;
  1562.                                 }
  1563.  
  1564.                                 break;
  1565.  
  1566.                             case GAD_QUICKMENU:
  1567.  
  1568.                                 if(Selected != ~0)
  1569.                                 {
  1570.                                     if(Phonebook[Selected] -> Header -> QuickMenu != SZ_GetChecked(Gadget))
  1571.                                     {
  1572.                                         Phonebook[Selected] -> Header -> QuickMenu = SZ_GetChecked(Gadget);
  1573.  
  1574.                                         RebuildMenu = PhonebookChanged = TRUE;
  1575.                                     }
  1576.                                 }
  1577.  
  1578.                                 break;
  1579.  
  1580.                             case GAD_PHONENUMBER:
  1581.  
  1582.                                 if(Selected != ~0)
  1583.                                 {
  1584.                                     strcpy(Phonebook[Selected] -> Header -> Number,SZ_GetString(GadgetArray[GAD_PHONENUMBER]));
  1585.  
  1586.                                     PhonebookChanged = TRUE;
  1587.  
  1588.                                     if(!Phonebook[Selected] -> Header -> Number[0])
  1589.                                     {
  1590.                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1591.                                             GTLV_Labels,    ~0,
  1592.                                         TAG_DONE);
  1593.  
  1594.                                         if(Phonebook[Selected] -> Count != -1)
  1595.                                         {
  1596.                                             RemoveDialEntry(Selected);
  1597.  
  1598.                                             if(!(--Count))
  1599.                                             {
  1600.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
  1601.                                                     GA_Disabled,    TRUE,
  1602.                                                 TAG_DONE);
  1603.                                             }
  1604.                                         }
  1605.  
  1606.                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1607.                                             GTLV_Labels,        PhoneList,
  1608.                                             GTLV_Selected,        Selected,
  1609.                                             GTLV_Top,        Selected,
  1610.                                             GTLV_MakeVisible,    Selected,
  1611.                                         TAG_DONE);
  1612.                                     }
  1613.                                     else
  1614.                                     {
  1615.                                         GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
  1616.                                             GA_Disabled,    Online || !Phonebook[Selected] -> Header -> Number[0] || !Phonebook[Selected] -> Header -> Name[0],
  1617.                                         TAG_DONE);
  1618.                                     }
  1619.                                 }
  1620.  
  1621.                                 break;
  1622.  
  1623.                             case GAD_LOADLIST:
  1624.  
  1625.                                 BlockWindow(PanelWindow);
  1626.  
  1627.                                 if(ChosenEntry)
  1628.                                     MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_PHONE_ENTRY_IN_USE_LOAD_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT));
  1629.                                 else
  1630.                                 {
  1631.                                     strcpy(DummyBuffer,LastPhone);
  1632.  
  1633.                                     DummyChar = PathPart(DummyBuffer);
  1634.  
  1635.                                     *DummyChar = 0;
  1636.  
  1637.                                     if(FileRequest = GetFile(LocaleString(MSG_PHONEPANEL_LOAD_PHONEBOOK_TXT),DummyBuffer,FilePart(LastPhone),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT),TRUE))
  1638.                                     {
  1639.                                         if(PhoneList)
  1640.                                             DeletePhoneList(PhoneList);
  1641.  
  1642.                                         if(!LoadPhonebook(DummyBuffer))
  1643.                                             MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_COULD_NOT_LOAD_PHONEBOOK_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
  1644.                                         else
  1645.                                         {
  1646.                                             strcpy(LastPhone,DummyBuffer);
  1647.  
  1648.                                             PhonebookChanged = FALSE;
  1649.  
  1650.                                             RebuildMenu = TRUE;
  1651.                                         }
  1652.  
  1653.                                         if(PhoneList = CreatePhoneList())
  1654.                                         {
  1655.                                             GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1656.                                                 GTLV_Labels,    PhoneList,
  1657.                                             TAG_DONE);
  1658.  
  1659.                                             FreeDialList(TRUE);
  1660.                                         }
  1661.  
  1662.                                         Count = 0;
  1663.  
  1664.                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
  1665.                                             GTST_String,    "",
  1666.                                             GA_Disabled,    TRUE,
  1667.                                         TAG_DONE);
  1668.  
  1669.                                         GT_SetGadgetAttrs(GadgetArray[GAD_COMMENT],PanelWindow,NULL,
  1670.                                             GTST_String,    "",
  1671.                                             GA_Disabled,    TRUE,
  1672.                                         TAG_DONE);
  1673.  
  1674.                                         GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
  1675.                                             GTST_String,    "",
  1676.                                             GA_Disabled,    TRUE,
  1677.                                         TAG_DONE);
  1678.  
  1679.                                         GT_SetGadgetAttrs(GadgetArray[GAD_QUICKMENU],PanelWindow,NULL,
  1680.                                             GA_Disabled,    TRUE,
  1681.                                         TAG_DONE);
  1682.  
  1683.                                         GT_SetGadgetAttrs(GadgetArray[GAD_USEIT],PanelWindow,NULL,
  1684.                                             GA_Disabled,    TRUE,
  1685.                                         TAG_DONE);
  1686.  
  1687.                                         GT_SetGadgetAttrs(GadgetArray[GAD_REMOVEENTRY],PanelWindow,NULL,
  1688.                                             GA_Disabled,    TRUE,
  1689.                                         TAG_DONE);
  1690.  
  1691.                                         GT_SetGadgetAttrs(GadgetArray[GAD_CLONEENTRY],PanelWindow,NULL,
  1692.                                             GA_Disabled,    TRUE,
  1693.                                         TAG_DONE);
  1694.  
  1695.                                         GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
  1696.                                             GA_Disabled,    TRUE,
  1697.                                         TAG_DONE);
  1698.  
  1699.                                         GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
  1700.                                             GA_Disabled,    TRUE,
  1701.                                         TAG_DONE);
  1702.  
  1703.                                         if(Kick30)
  1704.                                         {
  1705.                                             GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
  1706.                                                 GA_Disabled,    TRUE,
  1707.                                             TAG_DONE);
  1708.                                         }
  1709.  
  1710.                                         ActiveGadget = NULL;
  1711.  
  1712.                                         if(PhoneList)
  1713.                                         {
  1714.                                             if(!PhoneList -> lh_Head -> ln_Succ)
  1715.                                             {
  1716.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_SAVELIST],PanelWindow,NULL,
  1717.                                                     GA_Disabled,    TRUE,
  1718.                                                 TAG_DONE);
  1719.  
  1720.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_PRINT],PanelWindow,NULL,
  1721.                                                     GA_Disabled,    TRUE,
  1722.                                                 TAG_DONE);
  1723.  
  1724.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_COPYCONFIG],PanelWindow,NULL,
  1725.                                                     GA_Disabled,    TRUE,
  1726.                                                 TAG_DONE);
  1727.  
  1728.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
  1729.                                                     GA_Disabled,    TRUE,
  1730.                                                 TAG_DONE);
  1731.  
  1732.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
  1733.                                                     GA_Disabled,    TRUE,
  1734.                                                 TAG_DONE);
  1735.                                             }
  1736.                                             else
  1737.                                             {
  1738.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_SAVELIST],PanelWindow,NULL,
  1739.                                                     GA_Disabled,    FALSE,
  1740.                                                 TAG_DONE);
  1741.  
  1742.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_PRINT],PanelWindow,NULL,
  1743.                                                     GA_Disabled,    FALSE,
  1744.                                                 TAG_DONE);
  1745.  
  1746.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_COPYCONFIG],PanelWindow,NULL,
  1747.                                                     GA_Disabled,    FALSE,
  1748.                                                 TAG_DONE);
  1749.  
  1750.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
  1751.                                                     GA_Disabled,    FALSE,
  1752.                                                 TAG_DONE);
  1753.  
  1754.                                                 if(PhoneList -> lh_Head -> ln_Succ -> ln_Succ)
  1755.                                                 {
  1756.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
  1757.                                                         GA_Disabled,    FALSE,
  1758.                                                     TAG_DONE);
  1759.                                                 }
  1760.                                                 else
  1761.                                                 {
  1762.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
  1763.                                                         GA_Disabled,    TRUE,
  1764.                                                     TAG_DONE);
  1765.                                                 }
  1766.                                             }
  1767.                                         }
  1768.  
  1769.                                         Selected    = ~0;
  1770.                                         HitItem        = -1;
  1771.  
  1772.                                         FreeAslRequest(FileRequest);
  1773.                                     }
  1774.                                 }
  1775.  
  1776.                                 ReleaseWindow(PanelWindow);
  1777.  
  1778.                                 break;
  1779.  
  1780.                             case GAD_SORTLIST:
  1781.  
  1782.                                 if(NumPhoneEntries > 1)
  1783.                                 {
  1784.                                     RebuildMenu = PhonebookChanged = TRUE;
  1785.  
  1786.                                     BlockWindow(PanelWindow);
  1787.  
  1788.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1789.                                         GTLV_Labels,    ~0,
  1790.                                     TAG_DONE);
  1791.  
  1792.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
  1793.                                         GTST_String,    "",
  1794.                                         GA_Disabled,    TRUE,
  1795.                                     TAG_DONE);
  1796.  
  1797.                                     GT_SetGadgetAttrs(GadgetArray[GAD_COMMENT],PanelWindow,NULL,
  1798.                                         GTST_String,    "",
  1799.                                         GA_Disabled,    TRUE,
  1800.                                     TAG_DONE);
  1801.  
  1802.                                     GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
  1803.                                         GTST_String,    "",
  1804.                                         GA_Disabled,    TRUE,
  1805.                                     TAG_DONE);
  1806.  
  1807.                                     GT_SetGadgetAttrs(GadgetArray[GAD_USEIT],PanelWindow,NULL,
  1808.                                         GA_Disabled,    TRUE,
  1809.                                     TAG_DONE);
  1810.  
  1811.                                     GT_SetGadgetAttrs(GadgetArray[GAD_REMOVEENTRY],PanelWindow,NULL,
  1812.                                         GA_Disabled,    TRUE,
  1813.                                     TAG_DONE);
  1814.  
  1815.                                     GT_SetGadgetAttrs(GadgetArray[GAD_CLONEENTRY],PanelWindow,NULL,
  1816.                                         GA_Disabled,    TRUE,
  1817.                                     TAG_DONE);
  1818.  
  1819.                                     GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
  1820.                                         GA_Disabled,    TRUE,
  1821.                                     TAG_DONE);
  1822.  
  1823.                                     if(Kick30)
  1824.                                     {
  1825.                                         GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
  1826.                                             GA_Disabled,    TRUE,
  1827.                                         TAG_DONE);
  1828.                                     }
  1829.  
  1830.                                     ActiveGadget = NULL;
  1831.  
  1832.                                     if(PhoneList)
  1833.                                         DeletePhoneList(PhoneList);
  1834.  
  1835.                                     SortPhoneEntries();
  1836.  
  1837.                                     if(PhoneList = CreatePhoneList())
  1838.                                     {
  1839.                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1840.                                             GTLV_Labels,    PhoneList,
  1841.                                             GTLV_Selected,    ~0,
  1842.                                         TAG_DONE);
  1843.                                     }
  1844.  
  1845.                                     Selected    = ~0;
  1846.                                     HitItem        = -1;
  1847.  
  1848.                                     ReleaseWindow(PanelWindow);
  1849.                                 }
  1850.  
  1851.                                 break;
  1852.  
  1853.                             case GAD_SAVELIST:
  1854.  
  1855.                                 if(NumPhoneEntries)
  1856.                                 {
  1857.                                     strcpy(DummyBuffer,LastPhone);
  1858.  
  1859.                                     DummyChar = PathPart(DummyBuffer);
  1860.  
  1861.                                     *DummyChar = 0;
  1862.  
  1863.                                     BlockWindow(PanelWindow);
  1864.  
  1865.                                     if(FileRequest = GetFile(LocaleString(MSG_PHONEPANEL_SAVE_PHONEBOOK_TXT),DummyBuffer,FilePart(LastPhone),DummyBuffer,"#?.prefs",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT),TRUE))
  1866.                                     {
  1867.                                         if(!SavePhonebook(DummyBuffer))
  1868.                                             MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_COULD_NOT_CREATE_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
  1869.                                         else
  1870.                                         {
  1871.                                             strcpy(LastPhone,DummyBuffer);
  1872.  
  1873.                                             PhonebookChanged = FALSE;
  1874.                                         }
  1875.  
  1876.                                         FreeAslRequest(FileRequest);
  1877.                                     }
  1878.  
  1879.                                     ReleaseWindow(PanelWindow);
  1880.                                 }
  1881.  
  1882.                                 break;
  1883.  
  1884.                             case GAD_COPYCONFIG:
  1885.  
  1886.                                 BlockWindow(PanelWindow);
  1887.  
  1888.                                 if(Selected == ~0)
  1889.                                     PhonebookChanged |= CopyPanel(NULL,Count > 0);
  1890.                                 else
  1891.                                     PhonebookChanged |= CopyPanel(Phonebook[Selected] -> Config,Count > 0);
  1892.  
  1893.                                 ReleaseWindow(PanelWindow);
  1894.                                 break;
  1895.  
  1896.                             case GAD_PASSWORD:
  1897.  
  1898.                                 BlockWindow(PanelWindow);
  1899.  
  1900.                                 {
  1901.                                     struct Gadget *OldActiveGadget = ActiveGadget;
  1902.                                     UBYTE SomeBuffer[30];
  1903.  
  1904.                                     memset(SomeBuffer,0,21);
  1905.  
  1906.                                     PhonePasswordUsed = FALSE;
  1907.  
  1908.                                     if(GetString(FALSE,TRUE,21,LocaleString(MSG_PHONEPANEL_PLEASE_ENTER_PASSWORD_TXT),SomeBuffer))
  1909.                                     {
  1910.                                         SomeBuffer[20] = 0;
  1911.  
  1912.                                         PhonebookChanged = TRUE;
  1913.  
  1914.                                         if(SomeBuffer[0])
  1915.                                         {
  1916.                                             UBYTE OtherBuffer[30];
  1917.  
  1918.                                             memset(OtherBuffer,0,21);
  1919.  
  1920.                                             if(GetString(FALSE,TRUE,21,LocaleString(MSG_PHONEPANEL_PLEASE_REPEAT_PASSWORD_TXT),OtherBuffer))
  1921.                                             {
  1922.                                                 OtherBuffer[20] = 0;
  1923.  
  1924.                                                 if(!memcmp(OtherBuffer,SomeBuffer,20))
  1925.                                                 {
  1926.                                                     Encrypt(OtherBuffer,20,PhonePassword,OtherBuffer,strlen(OtherBuffer));
  1927.  
  1928.                                                     PhonePasswordUsed = TRUE;
  1929.                                                 }
  1930.                                                 else
  1931.                                                     MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_ERROR_ENTERING_PASSWORD_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT));
  1932.                                             }
  1933.                                             else
  1934.                                                 MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_ERROR_ENTERING_PASSWORD_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT));
  1935.                                         }
  1936.                                     }
  1937.  
  1938.                                     ActiveGadget = OldActiveGadget;
  1939.                                 }
  1940.  
  1941.                                 ReleaseWindow(PanelWindow);
  1942.                                 break;
  1943.  
  1944.                             case GAD_EDIT:
  1945.  
  1946.                                 if(Selected != ~0)
  1947.                                 {
  1948.                                     BlockWindow(PanelWindow);
  1949.  
  1950.                                     switch(Code)
  1951.                                     {
  1952.                                         case EDIT_RATES:
  1953.  
  1954.                                             if(Phonebook[Selected] == ChosenEntry)
  1955.                                                 MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_PHONE_ENTRY_IN_USE_EDIT_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
  1956.                                             else
  1957.                                             {
  1958.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1959.                                                     GTLV_Labels,    ~0,
  1960.                                                 TAG_DONE);
  1961.  
  1962.                                                 PhonebookChanged |= RatePanel(PhoneList,Phonebook[Selected]);
  1963.  
  1964.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1965.                                                     GTLV_Labels,    PhoneList,
  1966.                                                     GTLV_Selected,    Selected,
  1967.                                                 TAG_DONE);
  1968.                                             }
  1969.  
  1970.                                             break;
  1971.  
  1972.                                         case EDIT_PASSWORD:
  1973.  
  1974.                                             PhonebookChanged |= PasswordUserPanel(Phonebook[Selected]);
  1975.                                             break;
  1976.  
  1977.                                         default:
  1978.  
  1979.                                             PhonebookChanged |= EditConfig(Phonebook[Selected] -> Config,Code,PanelWindow);
  1980.                                             break;
  1981.                                     }
  1982.  
  1983.                                     ActiveGadget = GadgetArray[GAD_NAME];
  1984.  
  1985.                                     ReleaseWindow(PanelWindow);
  1986.                                 }
  1987.  
  1988.                                 break;
  1989.  
  1990.                             case GAD_DIALLIST:
  1991.  
  1992.                                 if(!Count && Selected != ~0)
  1993.                                 {
  1994.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1995.                                         GTLV_Labels,    ~0,
  1996.                                     TAG_DONE);
  1997.  
  1998.                                     SPrintf(Phonebook[Selected] -> Node -> LocalName,"      %s",Phonebook[Selected] -> Header -> Name);
  1999.  
  2000.                                     Phonebook[Selected] -> Count = Count++;
  2001.  
  2002.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  2003.                                         GTLV_Labels,    PhoneList,
  2004.                                     TAG_DONE);
  2005.                                 }
  2006.  
  2007.                                 if(Count > 0)
  2008.                                 {
  2009.                                     DialTheList    = TRUE;
  2010.                                     Terminated    = TRUE;
  2011.                                 }
  2012.  
  2013.                                 break;
  2014.                         }
  2015.                     }
  2016.                 }
  2017.             }
  2018.  
  2019.             RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  2020.  
  2021.             PopWindow();
  2022.  
  2023.             OffsetX = PanelWindow -> LeftEdge;
  2024.             OffsetY = PanelWindow -> TopEdge;
  2025.  
  2026.             CloseWindow(PanelWindow);
  2027.         }
  2028.     }
  2029.  
  2030.     if(PhonebookChanged)
  2031.         RebuildMenu = TRUE;
  2032.  
  2033.     FreeGadgets(GadgetList);
  2034.  
  2035.     FreeDialList(TRUE);
  2036.  
  2037.     if(PhoneList)
  2038.     {
  2039.         if(Count > 0)
  2040.         {
  2041.             TempNode = (struct PhoneNode *)PhoneList -> lh_Head;
  2042.  
  2043.             while(TempNode -> VanillaNode . ln_Succ)
  2044.             {
  2045.                 if(TempNode -> Entry -> Count != -1)
  2046.                     SortToList(TempNode);
  2047.  
  2048.                 TempNode = (struct PhoneNode *)TempNode -> VanillaNode . ln_Succ;
  2049.             }
  2050.  
  2051.             if(!DialList)
  2052.                 DialTheList = FALSE;
  2053.         }
  2054.  
  2055.         DeletePhoneList(PhoneList);
  2056.     }
  2057.  
  2058.     return(DialTheList);
  2059. }
  2060.